package com.istock.union.user.filter;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.method.HandlerMethod;

/**
 * 改写AuthorizationInterceptor,内部的授权校验全部使用AuthorizationCallback的方式集成
 * 允许业务集成方编写自己的AuthorizationCallback
 * 也可以让业务集成方自定义AuthorizationCallback的类型
 * @author senvon
 *
 */
public interface AuthorizationCallback {

	/**是否允许当前的callback执行
	 * 返回true,允许执行callback
	 * 返回false,跳过当前callback
	 * 
	 * @param request  请求对象
	 * @param targetObj 拦截的controller对象
	 * @return 返回true,允许执行callback,返回false,跳过当前callback
	 */
	public boolean canExecut(HttpServletRequest request , HandlerMethod targetObj);
	
	/**执行callback
	 * 返回true,继续剩余的callback
	 * 返回false,终止callback的执行,AuthorizationInterceptor直接返回
	 * @param request 请求对象
	 * @param response
	 * @param targetObj 拦截的controller对象
	 * @return 返回true,继续剩余的callback,返回false,终止callback的执行,AuthorizationInterceptor直接返回
	 */
	public boolean preCallback(HttpServletRequest request ,HttpServletResponse response, HandlerMethod targetObj);
	
	/**执行callback
	 * 返回true,继续剩余的callback
	 * 返回false,终止callback的执行,AuthorizationInterceptor直接返回
	 * @param request 请求对象
	 * @param response
	 * @param targetObj 拦截的controller对象
	 * @return 返回true,继续剩余的callback,返回false,终止callback的执行,AuthorizationInterceptor直接返回
	 */
	public boolean postCallback(HttpServletRequest request ,HttpServletResponse response, HandlerMethod targetObj);
}
